import os
import logging
import time
from logging.handlers import RotatingFileHandler

# 自定义颜色设置
COLORS = {
    'INFO': '\033[94m',   # 蓝色
    'ERROR': '\033[91m',  # 红色
    'WARNING': '\033[93m', # 黄色
    'DEBUG': '\033[92m',   # 绿色
    'RESET': '\033[0m'    # 重置颜色
}

datefmt = '%Y-%m-%d %H:%M:%S'  # 例如只显示到秒，不显示毫秒

# 自定义日志格式化器
class ColoredFormatter(logging.Formatter):
    def __init__(self, fmt, datefmt):
        super().__init__(fmt, datefmt)
    def format(self, record):
        # 获取日志级别的颜色
        levelname = record.levelname
        color = COLORS.get(levelname, COLORS['RESET'])
        reset = COLORS['RESET']
        
        # 在日志消息中添加颜色
        record.levelname = f"{color}{levelname}{reset}"
        
        # 调用父类格式化方法
        return super().format(record)

class CustomLogger:
    def __init__(self,dir_path,level):
        self.dir_path = dir_path
        self.level = level

    # log配置，实现日志自动按日期生成日志文件
    def make_dir(self):
        path = self.dir_path.strip()
        if not os.path.exists(path):
            os.makedirs(path)

    def getLogHandler(self):
        # 文件名，以日期作为文件名
        log_file_name = 'logger-' + time.strftime('%Y-%m-%d', time.localtime(time.time())) + '.log'
        # 创建日志文件
        self.make_dir()
        log_file_str = self.dir_path + os.sep + log_file_name

        # 默认日志等级的设置
        logging.basicConfig(level=self.level)

        # 创建日志记录器，指明日志保存路径,每个日志的大小，保存日志的上限
        file_log_handler = RotatingFileHandler(log_file_str, maxBytes=1024 * 1024, backupCount=10, encoding='UTF-8')
        # 设置日志的格式  发生时间      日志等级          日志信息文件名   行数           函数名        日志信息
        log_format = '%(asctime)s-%(levelname)s==>%(filename)s(row:%(lineno)s)-func:%(funcName)s[message:[%(message)s]]'
        formatter = ColoredFormatter(log_format, datefmt)
        # formatter = logging.Formatter()
        # 将日志记录器指定日志的格式
        file_log_handler.setFormatter(formatter)

        # 日志等级的设置
        # file_log_handler.setLevel(logging.WARNING)

        return file_log_handler
